home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / Sample Code / Archive / Graphics / QuickDraw GX / GX->PostScript Sample / GXToPostScript / Imaging Engine / RGBBufferToGrayPatch.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-28  |  1.3 KB  |  62 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        RGBBufferToGrayPatch.c
  3.  
  4.      Contains:    QuickDraw GX to PostScript conversion code.
  5.                          File contains C code for the patch version of the 
  6.                         RGBBufferToGray operator.
  7.  
  8.      Version:    Technology:    Quickdraw GX 1.1.x
  9.       
  10.      Copyright:    © 1993-1997 by Apple Computer, Inc., all rights reserved. 
  11. */
  12.  
  13.  
  14. #include "printer types.h"
  15.  
  16. void RGBBufferToGray()
  17.     {
  18.     
  19.         StringObj                *rgbString;
  20.         unsigned char        *p, *pGrey;                                    // Pointer into string data.
  21.         long                        r, g, b, grey;
  22.         long                        i, nPix;
  23.         
  24.  
  25.         ps_dup();                                                    // Duplicate the string on the stack for getinterval later.
  26.         rgbString = PopString();                    // Get a reference to the string object.
  27.         
  28.         nPix = rgbString->length / 3;            // Compute the number of pixels.
  29.         p = rgbString->strptr;
  30.         pGrey = p;
  31.         
  32.         for (i = 0; i < nPix; ++i) {
  33.         
  34.             r = *p++;
  35.             g = *p++;
  36.             b = *p++;
  37.             
  38.             /** This computes (5*red + 9*green + 2*blue)/16 **/
  39.             
  40.             //  ((((((r+g)/2)+b)/2+r)/2)+g)/2
  41.             grey = ( ( ( (( ( (r+g) >> 1) + b) >> 1) + r) >> 1) +g ) >> 1;
  42.             
  43.             *pGrey++ = grey;                                                            // Write it back into the string at position i.
  44.         
  45.         }//end for
  46.         
  47.         
  48.         /** Now put the substring [0…nPix-1] on stack **/
  49.  
  50.         PushLong(0);
  51.         PushLong(nPix);
  52.         ps_getinterval();        
  53.     
  54.     }//RGBBufferToGray
  55.  
  56.  
  57.  
  58. void DefineCommand()
  59. {
  60.     RegisterCommand("RGBBufferToGray", RGBBufferToGray);
  61. }
  62.